#ifndef DESIGN_FACTORY_H_
#define DESIGN_FACTORY_H_

#include <string>
#include <vector>

namespace factory{

class Pizza
{
public:
    void prepare();
    void bake();
    void cut();
    void box();
protected:
    std::string m_name;
    std::string m_dough;
    std::string m_sauce;
    std::vector<std::string> m_toppings;
};

class PizzaStore
{
public:
    virtual Pizza* createPizza(std::string t) = 0;
public:
    Pizza* orderPizza(std::string t);
};
/////////////////////////////////////
class NYStylePizzaStore:public PizzaStore
{
public:
    virtual Pizza* createPizza(std::string t);
};

class ChicagoStylePizzaStore:public PizzaStore
{
public:
    virtual Pizza* createPizza(std::string t);
};
/////////////////////////////////////
class NYStyleCheesePizza:public Pizza
{
public:
    NYStyleCheesePizza();
};

class NYStyleVeggiePizza:public Pizza
{
public:
    NYStyleVeggiePizza();
};

class NYStyleClamPizza:public Pizza
{
public:
    NYStyleClamPizza();
};

class NYStylePepperoniPizza:public Pizza
{
public:
    NYStylePepperoniPizza();
};

class ChicagoStyleCheesePizza:public Pizza
{
public:
    ChicagoStyleCheesePizza();
};

class ChicagoStyleVeggiePizza:public Pizza
{
public:
    ChicagoStyleVeggiePizza();
};

class ChicagoStyleClamPizza:public Pizza
{
public:
    ChicagoStyleClamPizza();
};

class ChicagoStylePepperoniPizza:public Pizza
{
public:
    ChicagoStylePepperoniPizza();
};

}
#endif // DESIGN_FACTORY_H_
